package com.java.dao;

import com.java.bean.Courier;
import com.java.exception.DuplicateIdCardException;
import com.java.exception.DuplicatePhoneException;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @InterfaceName BaseCourierDao
 * @Description 快递员dao接口
 * @Author 0715-YuHao
 * @Date 2020/9/14 15:39
 * @Version 1.0
 */
public interface BaseCourierDao {

    /**
     * @Author 0715-YuHao
     * @Description 用于用于查询数据库中的全部快递员（总数+新增）
     * @Date 15:41 2020/9/14
     * @Param []
     * @return [{size:总数,daySize:新增}]
     **/
    Map<String,Integer> console();

    /**
     * @Author 0715-YuHao
     * @Description 查询所有快递员信息
     * @Date 15:43 2020/9/14
     * @Param [limit, args] [limit, offset, pageNumber] [是否分页的标记，true表示分页。false表示查询所有快递, SQL语句的起始索引, 页查询的数量]
     * @return 快递员的集合
     **/
    List<Courier> findAll(boolean limit, int... args);

    /**
     * @Author 0715-YuHao
     * @Description 更新登录时间
     * @Date 2020/9/16 9:27
     * @Param [userPhone]
     * @return boolean
     */
    void updateLoginTime(String userPhone);

    /**
     * @Author 0715-YuHao
     * @Description 通过电话号码查询快递员信息
     * @Date 15:44 2020/9/14
     * @Param [phone] 要查询的电话号码
     * @return 快递员的信息，电话不存在时返回null;
     **/
    Courier findByPhone(String phone);

    /**
     * @Author 0715-YuHao
     * @Description 快递员注册
     * @Date 15:46 2020/9/14
     * @Param [courier] [要注册的快递员信息]
     * @return 注册的结果，true表示成功，false表示失败
     **/
    boolean insert(Courier courier) throws DuplicateIdCardException, DuplicatePhoneException;

    /**
     * @Author 0715-YuHao
     * @Description 派单数加1
     * @Date 22:36 2020/9/17
     * @Param [userPhone] [快递员手机号码]
     * @return boolean
     **/
    boolean numberDispatchAddOne(String userPhone);

    /**
     * @Author 0715-YuHao
     * @Description 修改快递员
     * @Date 15:49 2020/9/14
     * @Param [id, newCourier] [要修改的快递员id, 新的快递员对象(name, phone, idCard, password)]
     * @return 修改的结果，true表示成功，false表示失败
     **/
    boolean update(int id, Courier newCourier) throws DuplicateIdCardException, DuplicatePhoneException;
    /**
     * @Author 0715-YuHao
     * @Description 微信端修改用户信息
     * @Date 10:46 2020/9/18
     * @Param [userPhone]
     * @return boolean
     **/
    boolean updateByWx(String userPhone, Courier newCourier);

    /**
     * @Author 0715-YuHao
     * @Description 删除快递员
     * @Date 15:53 2020/9/14
     * @Param [id] [要删除的快递员id, 手机号码，身份证号码]
     * @return 删除的结果，true表示成功，false表示失败
     **/
    boolean delete(int id, String phone, String idCard);
}
